第7期吐槽:今年才等来slot failover,附上海DBA招聘信息
文中参考文档点击阅读原文打开, 同时推荐2个学习环境:
1、懒人Docker镜像, 已打包200+插件:《最好的PostgreSQL学习镜像》
2、有web浏览器就能用的云起实验室: 《免费体验PolarDB开源数据库》
3、PolarDB开源数据库内核、最佳实践等学习图谱: https://www.aliyun.com/database/openpolardb/activity
第7期吐槽:再不吐就要放弃了,2024终于等来slot failover
1、产品的问题点
slot不支持failover
2、问题点背后涉及的技术原理
PG的逻辑日志解析功能需要slot来记录解析的WAL日志位点, 下次解析从位点继续. 除了记录位点, PG还需要依赖位点来保留未解析的WAL日志, 以及保留用于解析WAL日志的catalog版本(例如表结构信息). 但是SLOT不支持failover, 使用PG流复制构建的主从HA架构下一旦发生HA, 从库(切换成主库)是没有SLOT信息的.
使用pg_upgrade进行大版本升级时,slot也会被清理.
3、这个问题将影响哪些行业以及业务场景
使用PG流复制构建的主从HA架构, 并且有逻辑日志订阅需求的场景(例如跨实例共享某些表的数据、将数据库的增量日志同步到其他系统, 例如mq或者搜索引擎等. 使用了PG的pub,sub来进行实例之间的表级数据同步).
4、会导致什么问题?
发生主从切换后, SLOT位点丢失, 需要重建SLOT, 存在丢失增量数据的风险. (例如老的主节点与切换到新的主库新建的slot位置之间存在WAL GAP.)
大版本升级无法保留slot
5、业务上应该如何避免这个坑
发生HA时, 立即在新的主库新建同名的slot, 但是wal gap导致的逻辑增量日志丢失无解.
大版本升级属于计划内维护, 可以在升级前消费掉所有的wal日志, 并且在升级后立即创建slot. 保证没有wal gap导致的逻辑增量日志问题.
6、业务上避免这个坑牺牲了什么, 会引入什么新的问题
增加了管理复杂度
7、数据库未来产品迭代如何修复这个坑
slot failover功能. (阿里云RDS PG 已修复, PolarDB PG已开源这个功能)
PG 16版本支持了standby创建slot, 同时standby支持logical replication to 下游.
PG 17支持了slot failover.
PG 11+ 可以使用edb的pg_failover_slot插件支持slot failover: https://github.com/EnterpriseDB/pg_failover_slots
文章中的参考文档请点击阅读原文获得.
欢迎关注我的github (https://github.com/digoal/blog) , 学习数据库不迷路.
近期正在写公开课材料, 未来将通过视频号推出, 欢迎关注视频号: